#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "fun.h"
 
void menu(){
	printf("\n\t\t va的账号管理系统");
	printf("\n\t\t--------------------------");
	printf("\n\t\t 1-玩家基本信息维护");
	printf("\n\t\t 2-玩家战绩管理 ");
	printf("\n\t\t 0-退出系统");
	printf("\n\t\t--------------------------");
	printf("\n\t\t请选择（0 - 2）："); 
}


void menu1(va *a, war *b, P *c, int *n,int *zong) {
    int flag = 1, goal = 0;
    while (flag == 1) {
		printf("\n\t\t--------------------------");
        if (*n == 0) {
            printf("\n\t\t 1-输入玩家");
        } else {
            printf("\n\t\t 1-增加玩家");
            goal = 1;
        }
        printf("\n\t\t 2-查找玩家");
        printf("\n\t\t 3-显示所有玩家信息");
        printf("\n\t\t 4-删除所有玩家信息");
        printf("\n\t\t 0-退出");
        printf("\n\t\t--------------------------");
        printf("\n\t\t 请选择(0-3)：");

        int option;
        if(scanf("%d", &option) == 0){
        	printf("请重新输入\n");
		}
        while (getchar() != '\n');  


        switch (option) {
            case 1:
                add_all(a, b, c, n, goal,zong);  
                break;

            case 2:
                if(*n > 0){
            		find(a, b, c, n); 
				}
                else
                printf("未添加玩家");
                break;

            case 3:
            	if(*n > 0){
            		putAll(a, n); 
				}
                else
                printf("未添加玩家");
                break;

			case 4:
				int q;
				system("cls");
				while(1){
					printf("是否确认删除所有玩家？(是 = 6，否 = 0):");
					scanf("%d",&q);
					if(q != 6 && q != 0){
						printf("请正确输入\n");
					}
					else
					break;
				}
				if(q == 6)
				Delete_all(a,b,c,n);
				else
				break;

            case 0:
                printf("退出系统\n");
                flag = 0;
                return;

			default:
                printf("无效选择，请重新选择。\n");
                break;
        }
    }
}

void add(va *a, war *b, P *c, int i, int *zong) {
    printf("第%d个玩家：\n", i + 1);
    printf("玩家id：\n");
    scanf("%s", a[i].id);
    strcpy(b[i].na, a[i].id);
    strcpy(c[i].name, a[i].id);

    printf("玩家账号：\n");
    scanf("%d", &a[i].a_n);
    
    printf("玩家密码：\n");
    scanf("%d", &a[i].p_w);
    
    printf("玩家地址：\n");
    scanf("%s", a[i].ad);
    
    // 输入游戏场次，并校验
    while (1) {
        printf("输入游戏场次：");
        scanf("%d", &c[i].ca);
        
        if (c[i].ca < 0) {
            printf("输入错误，请重新输入\n");
        } else {
            *zong += c[i].ca;
            break;
        }
    }
    
    // 清除换行符
    while (getchar() != '\n');
    
    // 处理每场游戏数据
    int r = 0;  // 胜场计数
    for (int j = 0; j < c[i].ca; j++) {
        printf("第%d场\n", j + 1);
        printf("游戏总时长：");
        scanf("%d", &b[i].all_t);
        
        printf("实际时长：");
        scanf("%d", &b[i].real_t);
        a[i].a_t+=b[i].real_t;
        printf("双杀次数：");
        scanf("%d", &b[i].s_k);
        
        printf("三杀次数：");
        scanf("%d", &b[i].t_k); 
        
        printf("助攻次数：");  
        scanf("%d", &b[i].help);
        
        printf("击杀数：");
        scanf("%d", &b[i].kill);
        
        printf("死亡：");
        scanf("%d", &b[i].death);
        
        printf("胜或败(1=胜，0=败)：");
        scanf("%d", &b[i].c);
        
        // 检查胜败输入
        if (b[i].c != 1 && b[i].c != 0) {
            printf("只能输入（1=胜，0=败）\n");
        }

        if (b[i].c == 1) {
            r++;
        }

        c[i].r = r; // 更新胜利场次

        // 计算得分
        b[i].grade = (b[i].help * 5 + b[i].kill * 10 + b[i].s_k * 15 + b[i].t_k * 20 - b[i].death) * (b[i].c + 0.5);
        printf("玩家单场得分：%.2f\n", b[i].grade);
        
        // 更新总分
        if (strcmp(b[i].na, c[i].name) == 0) {
            c[i].W += b[i].grade;
        }

        b[i].h_goal = b[i].grade * 0.5;
        printf("单场英雄得分：%.2f\n", b[i].h_goal);

        printf("单场英雄选择：");
        scanf("%s", b[i].hero);
        
        // 计算英雄得分
        if (strcmp(b[i].hero, "Y1") == 0) {
            c[i].Y1 += b[i].h_goal;
        }
        if (strcmp(b[i].hero, "Y2") == 0) {
            c[i].Y2 += b[i].h_goal;
        }
        if (strcmp(b[i].hero, "Y3") == 0) {
            c[i].Y3 += b[i].h_goal;
        }
        if (strcmp(b[i].hero, "Y4") == 0) {
            c[i].Y4 += b[i].h_goal;
        }

        // 计算逃跑率
        float run = 1.0f - (float)b[i].real_t / b[i].all_t;
        printf("逃跑率：%.2f%%\n", run * 100);
    }
}


void add_all(va *a, war *b, P *c, int *n, int goal,int *zong) {
    int ad;
    if (goal == 0) {

        printf("输入玩家个数：");
        scanf("%d", n);
        if (*n < 0) {
            printf("错误：增加玩家数不正确！\n");
            *n = 0; 
            return;
        }
        for (int i = 0; i < *n; i++) {
            add(a, b, c, i,zong);  
        }
    } else {

        printf("增加玩家个数：");
        scanf("%d", &ad);
        if (ad < 0) {
            printf("错误：增加玩家数不正确！\n");
            return;
        }
        for (int i = *n; i < *n + ad; i++) {
            add(a, b, c, i,zong);  
        }
        *n += ad;
    }
}



void put(va *a,int i){
	printf("\n\t\t id：%s\n",a[i].id);
	printf("\n\t\t 账号：%d\n",a[i].a_n);
	printf("\n\t\t 密码：%d\n",a[i].p_w);
	printf("\n\t\t 地址：%s\n",a[i].ad);
	printf("\n\t\t 游戏总时长：%d\n",a[i].a_t);
}

void putAll(va *a,int *n){
		for(int i=0;i<*n;i++)
	{
		put(a,i);
	}		
	
}

void find(va *a, war *b, P *c, int *n){
		int flag = 1,zhang;char ni[15],di[25];
		while(flag == 1){
		system("cls");
		printf("\n\t\t--------------------------");
		printf("\n\t\t 1-账号查找");
		printf("\n\t\t 2-id查找");
		printf("\n\t\t 3-地址查找");
		printf("\n\t\t 0-退出");
		printf("\n\t\t--------------------------");
		printf("\n\t\t 请选择(0-3)：");
		int option;
		if(scanf("%d", &option) == 0){
        	printf("请重新输入\n");
		}
	while(getchar()!='\n');
		switch(option){
			case 1:
				printf("请输入账号：");
				scanf("%d",&zhang);
				for(int i=0;i<*n;i++){
					if(a[i].a_n == zhang)
					{
						put(a,i);
						menu1_1(a,i,n);
						break;
					}
				}
				printf("未找到此人");
				break;
			case 2:
				printf("请输入id：");
				scanf("%s",ni);
				for(int i=0;i<*n;i++){
					if(strcmp(a[i].id,ni) == 0)
					{
						put(a,i);
						menu1_1(a,i,n);
						break;
					}
				}
				printf("未找到此人");
				break;
			case 3:
				printf("请输入地址：");
				scanf("%s",di);
				for(int i=0;i<*n;i++){
					if(strcmp(a[i].ad,di) == 0)
					{
						put(a,i);
						menu1_1(a,i,n);
						break;
					}
				}
				printf("未找到此人");
				break;
			case 0:	
				printf("退出系统\n");
				flag = 0;
                break;
                
            default:
                printf("无效选择，请重新选择。\n");
                break;
		}
		system("pause");
	}

}
		
void Delete_all(va *a,war *b,P *c,int *n){
	if(*n > 0){
		for(int i=0;i<*n;i++){
		memset(&a[i], 0, sizeof(va));   
        memset(&b[i], 0, sizeof(war));  
        memset(&c[i], 0, sizeof(P));
	}
	*n = 0;
	printf("删除成功");
}
	else
	printf("未输入玩家");
	}
	

void Delete(va *a,int *n,int i){
	for(int j = i+1;j<*n;j++){
		a[j-1] = a[j];
	}
	(*n)--;
}

void modify(va *a,int i){
int flag = 1,zhang;char ni[15],di[25];
		while(flag == 1){
		system("cls");
		printf("\n\t\t--------------------------");
		printf("\n\t\t 1-修改账号");
		printf("\n\t\t 2-修改id");
		printf("\n\t\t 3-修改地址");
		printf("\n\t\t 0-退出");
		printf("\n\t\t--------------------------");
		printf("\n\t\t 请选择(0-3)：");
		int option;
		if(scanf("%d", &option) == 0){
        	printf("请重新输入\n");
		}
		while(getchar()!='\n');
		switch(option){
			case 1:
				printf("账号修改为：");
				scanf("%d",&zhang);
				a[i].a_n = zhang;
				printf("修改成功");
				break;
				
			case 2:
				printf("修改id为：");
				scanf("%s",ni);
				strcpy(a[i].id,ni);
				printf("修改成功");
				break;
				
			case 3:
				printf("地址修改为：");
				scanf("%s",di);
				strcpy(a[i].ad,di);
				printf("修改成功");
				break;
				
			case 0:
				printf("退出");
				flag = 0;
				break;
				
			default:
                printf("无效选择，请重新选择。\n");
                break;
}
}
}

void menu1_1(va *a,int i,int *n){
	int flag = 1;
		printf("\n\t\t--------------------------");
		printf("\n\t\t 1-删除");
		printf("\n\t\t 2-修改");
		printf("\n\t\t 0-退出");
		printf("\n\t\t--------------------------");
		printf("\n\t\t 请选择(0-2)：");
		int option;
		scanf("%d",&option);
		while(getchar()!='\n');
		switch(option){
			case 1:
				Delete(a,n,i);
				printf("删除成功");
				break;
				
			case 2:
				modify(a,i);
				break;
				
			case 0:
				flag = 0;
				printf("退出系统");
				break;
				
			default:
				printf("无效选择，请重新选择。\n");
                break;
			}
		}

  

